﻿-------------------------------------------------------------------------------
-- Работа с файлами через FastCopy (FastCopy.exe © http://ipmsg.org/tools/fastcopy.html). © SimSU
-------------------------------------------------------------------------------

---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Plugin_FastCopy.cfg
return{
  KeyCopy="CtrlShiftF5"; PriorCopy=49; --Копирование в фоне.
  KeyMove="CtrlShiftF6"; PriorMove=49; --Перенос в фоне.
  KeyDelete="CtrlShiftF8"; PriorDelete=51; --Удаление в фоне.

  FastCopyName=win.GetEnv("FARHOME").."\\FastCopy.exe"; -- Имя ФастКопи с полным путём FastCopy.exe
  Copy="/cmd=diff /error_stop=FALSE /auto_close"; -- Опции копирования.
  Move="/cmd=move /error_stop=FALSE /auto_close"; -- Опции переноса.
  Delete="/cmd=delete /no_confirm_del /error_stop=FALSE /auto_close"; -- Опции удаления.
}
-- Конец файла Profile\SimSU\Plugin_FastCopy.cfg
end

_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\Plugin_FastCopyRussian.lng
return{
  CopyDescr="Копирование в фоне с помощью FastCopy.exe. © SimSU";
  MoveDescr="Перенос в фоне с помощью FastCopy.exe. © SimSU";
  DeleteDescr="Удаление в фоне с помощью FastCopy.exe. © SimSU";
}
-- Конец файла Profile\SimSU\Plugin_FastCopyRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Plugin_FastCopyEnglish.lng
return{
  CopyDescr="Копирование в фоне с помощью FastCopy.exe. © SimSU";
  MoveDescr="Перенос в фоне с помощью FastCopy.exe. © SimSU";
  DeleteDescr="Удаление в фоне с помощью FastCopy.exe. © SimSU";
}
-- End of file Profile\SimSU\Plugin_FastCopyEnglish.lng
end end

local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Plugin_FastCopy"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Plugin_FastCopy.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Plugin_FastCopy.cfg") or Settings)()

local SimSU=SimSU or {}
SimSU.Plugin_FastCopy={}
-------------------------------------------------------------------------------
local FastCopyName=S.FastCopyName or "FastCopy.exe"
if not win.GetFileAttr(S.FastCopyName) then return end
local Copy= S.Copy or "/cmd=diff /error_stop=FALSE /auto_close"; -- Опции копирования.
local Move= S.Move or "/cmd=move /error_stop=FALSE /auto_close"; -- Опции переноса.
local Delete= S.Delete or "/cmd=delete /no_confirm_del /error_stop=FALSE /auto_close"; -- Опции удаления.

function SimSU.Plugin_FastCopy.Files() -- Формирование списка выделенных файлов с полными путями в кавычках в одну строку.
  local list,idx={},{}
  for i=1,panel.GetPanelInfo(nil,1).SelectedItemsNumber do
    list[i]=panel.GetSelectedPanelItem(nil,1,i).FileName
    idx[i]=i
  end
  panel.ClearSelection(nil,1,idx); panel.RedrawPanel(nil,1) -- Очищаем выделение файлов.
  local Path=panel.GetPanelDirectory(nil,1).Name
  list='"'..Path.."\\"..table.concat(list,'" "'..Path.."\\")..'"'
  return list
end

function SimSU.Plugin_FastCopy.Do(CMD) -- Выполнение команды.
  CMD=CMD or Copy 
  local list=SimSU.Plugin_FastCopy.Files() -- Формируем список файлов.
  win.ShellExecute(nil,nil,FastCopyName,CMD..' '..list..' /to="'..panel.GetPanelDirectory(nil,0).Name..'\\"',nil,nil) -- Запускаем FastCopy.exe
end
-------------------------------------------------------------------------------
if not Macro then return {Plugin_FastCopy=SimSU.Plugin_FastCopy} end

local ok, mod = pcall(require,"SimSU.Plugin_FastCopy"); if ok then SimSU=mod else _G.SimSU=SimSU end
-------------------------------------------------------------------------------

Macro {area="Shell"; key=S.KeyCopy; priority=S.PriorCopy; description=M.CopyDescr; flags="NoPluginPanels NoPluginPPanels";
  action=SimSU.Plugin_FastCopy.Do;
}
Macro {area="Shell"; key=S.KeyMove; priority=S.PriorMove; description=M.MoveDescr; flags="NoPluginPanels NoPluginPPanels";
  action=function() SimSU.Plugin_FastCopy.Do(Move) end;
}
Macro {area="Shell"; key=S.KeyDelete; priority=S.PriorDelete; description=M.DeleteDescr; flags="NoPluginPanels";
  action=function() SimSU.Plugin_FastCopy.Do(Delete) end;
}
